<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      // 1.catch  实例化对象的方法 这里的catch实际上调用的是onRejected
      //2. catch 的返还值和 onRejected的返还值一样，catch是异步，也是微任务
      // 3.一般 then里就只写一个onResolved回调。onRejected回调不写；通过catch捕捉错误
      // 为什么使用catch  因为catch会捕捉promise对象链式上的错误
      let p1 = new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve();
        });
      });
      p1.then((res) => {
        console.log("111");
      })
        .then((res) => {
          console.log("222");
        })
        .then((res) => {
          return new Promise((resolve, reject) => {
            reject("错误了333");
          });
        })
        .catch((err) => {
          console.log(err);
        });

      // 2.finally promise执行完成之后调用
      // 执行完成： 无论promise 执行成功了，还是执行失败了，只要promise执行完了就会调用finally
      let p2 = new Promise((resolve, reject) => {
        setTimeout(() => {
          // reslove(111);
          reject("失败了");
        }, 1000);
      });
      p2.then((res) => {
        console.log(res);
      })
        .catch((err) => {
          console.log(err);
        })
        .finally(() => {
          console.log("promise执行完毕了");
        });
    </script>
  </body>
</html>
